Amazon AuroraがPostgreSQL 15に対応しました
2022年10月にGAになったPostgreSQL 15(15.2)をAmazon Auroraでも利用できるようになりました。
Amazon Aurora now supports PostgreSQL 15 @ 2023/04/07
- MERGE コマンド
- ソートのパフォーマンス向上
- ロジカルレプリケーション対象のテーブル列指定、行指定可能
- JSON形式のログ出力
など様々な機能が追加されています。
詳細は公式のリリースノートやHPE篠田さんの虎の巻をご確認ください。
OSS PostgreSQL と Aurora PostgreSQLの違い
- PostgreSQL 15から圧縮レベルだけでなく圧縮アルゴリズム(Gzip/LZ4/Zstandard)も指定できるようになりましたが、Auroraは独自の分散ストレージシステムのため、対応していません。
pg_backup_start()/pg_backup_stop()
を使ったオンラインバックアップには対応していません。- リカバリー時のWALのプリフェッチ(
recovery_prefetch
)には対応していません。
詳細は、Aurora PostgreSQL 15.2のリリースノートをご確認ください。
pg_walinspect は RDS では対応し Aurora では未対応
PostgreSQL 15からは、WALをインスペクトする pg_walinspect
が追加されました。
PostgreSQL: Documentation: 15: F.37. pg_walinspect
従来の pg_waldump はファイルシステムへのアクセスが必要なのに対して、 pg_walinspect は SQL インターフェースのため、クラウドとの相性が良いです。
While working on one of the internal features, we found that it is a bit difficult to run pg_waldump for a normal user to know WAL info and stats of a running postgres database instance in the cloud.
PostgreSQL: pg_walinspect - a new extension to get raw WAL data and WAL stats
残念ながら、Aurora PostgreSQL 15が対応しているエクステンションのリストには含まれていません。 RDS for PostgreSQL 15が対応しているのとは対照的です。
Aurora PostgreSQL でもエクステンションを有効化することなら可能です。
postgres=> create extension pg_walinspect; CREATE EXTENSION postgres=> \dx List of installed extensions Name | Version | Schema | Description ---------------+---------+------------+------------------------------------------------------------- pg_walinspect | 1.0 | public | functions to inspect contents of PostgreSQL Write-Ahead Log plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language (2 rows) postgres=> SELECT pg_current_wal_lsn(); ERROR: wal_level must be set to 'logical' HINT: WAL control functions cannot be executed when wal_level < logical. postgres=> show wal_level; wal_level ----------- replica
wal_level
はWALの情報量を決定するパラメーターです。
minimal
< replica
< logical
という上下関係があり、 Aurora PostgreSQL 10 以降のデフォルトは replica
です
Aurora PostgreSQL では WAL は
- クラッシュリカバリ
- ロジカルレプリケーション
- リーダーインスタンスのページキャッシュの更新
などに利用されます。
HINT
にあるように、wal_level
を logical
に変更することで、 pg_walinspect
を有効化することは可能です。
そのためには、クラスターパラメーターグループの rds.logical_replication
をデフォルトの 0 から 1に変更して、DBインスタンスを再起動します。
postgres=> show wal_level; wal_level ----------- logical postgres=> create table public.t1(id int); CREATE TABLE postgres=> select pg_current_wal_lsn(); pg_current_wal_lsn -------------------- 0/408DFA8 (1 row) postgres=> insert into public.t1 values(1); INSERT 0 1 postgres=> select pg_current_wal_lsn(); pg_current_wal_lsn -------------------- 0/408F1C0 (1 row)
ここまでは問題なさそうです。
pg_current_wal_lsn
以外の API も試してみると、エラーが発生します。
postgres=> select * from pg_get_wal_records_info('0/408DFA8', '0/408F1C0'); ERROR: permission denied for function pg_get_wal_records_info postgres=> select * from pg_get_wal_stats('0/408DFA8', '0/408F1C0', true); ERROR: permission denied for function pg_get_wal_stats postgres=>
ユーザーが利用可能な 最も権限の強いロールである rds_superuser ロールに pg_walinspect の実行権限がないためです。
postgres=> \du postgres List of roles Role name | Attributes | Member of -----------+-------------------------------+----------------- postgres | Create role, Create DB +| {rds_superuser} | Password valid until infinity | postgres=> select has_function_privilege('postgres', 'pg_current_wal_lsn()', 'execute'); has_function_privilege ------------------------ t (1 row) postgres=> select has_function_privilege('postgres', 'pg_get_wal_record_info(pg_lsn)', 'execute'); has_function_privilege ------------------------ f (1 row)
Babelfish が 3.1 にバージョンアップ
Amazon Aurora固有の機能改善として、Babelfishが3.1にバージョンアップしました。
- Kerberos/AWS Directory Service for Microsoft Managed Active Directory認証
- Linked Servers
などに対応しています。
Aurora PostgreSQL 15へのメジャーアップグレード
Aurora PostgreSQL 15へは、12系以上からメジャーアップグレード可能です。
$ aws rds describe-db-engine-versions \ --engine aurora-postgresql \ --engine-version 12.14 \ --query 'DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}' \ --output text 13.10 14.7 15.2
12/13系 Aurora PostgreSQLの場合、15系にメジャーアップグレードする前に、それぞれのメジャーバージョンの最新版にマイナーアップデートしましょう。